Git
分区
本地 Git 的三个分区分别是:working directory, stage/index area, commit history
working directory
working directory 是工作目录,也就是肉眼能看到的文件。
stage/index area
当在 work dir 中执行 git add 相关命令后,就会把 work dir 中的修改添加到暂存区 stage 中去。
commit history
当 stage 中存在修改时,使用 git commit 相关命令之后,就会把 stage 中的修改保存到提交历史 (commit history) 中,也就是 HEAD 指针指向的位置。
任何修改只要进入 commit history,基本可以认为永远不会丢失了。每个 commit 都有一个唯一的 Hash 值,常说的 HEAD 或者 master 分支,都可以理解为一个指向某个 commit 的指针。
working directory 和 stage/index area 区域的状态可以通过命令 git status 来查看,commit history 区域的提交历史可以通过 git log 命令查看
需求
把 work dir 中的修改加入 stage
使用 git add 相关命令就行。add 还有个别名叫做 stage,这个命令和 add 命令是完全一样的。
把 stage 中的修改还原到 work dir 中
使用 git checkout。checkout 命令只会把修改的文件恢复成stage 的状态,如果 work dir 中新增了新文件,使用 git checkout 是不会删除新文件的。
将 stage 区的文件添加到 history 区
使用 git commit -m '一些描述'。如果发现一些错别字需要修改,又不想为改几个错别字而新开一个commit 到 history 区,那么就可以使用 git commit --amend。这样就是把错别字的修改和之前的那个 commit 中的修改合并,作为一个 commit 提交到 history 区。
将 history 区的文件还原到 stage 区
使用 git reset 命令可以把文件从 stage 区移出,这时候进行 git commit 相关的操作就不会把这个文件一起提交到 history 区。
将 history 区的历史提交还原到 work dir 中
如果想将项目回到某个指定的版本,可用 git checkout HEAD .(回到最新的版本) git checkout xxxxxx .(回到历史版本)
合并多个 commit
如果本地从 17bd20c 到 HEAD 有多个 commit,但希望把他们合并成一个 commit 推到远程仓库,这时候可以使用 reset 命令。
$ git reset 17bd20c
$ git add .
$ git commit -m 'balabala'